#ifndef SIMPLEWIN_H
#define SIMPLEWIN_H
#include <Fl/Fl_Double_Window.H>
#include <Fl/Fl_Box.H>
#include <FL/Fl.H>
#include <fl/Fl_Menu_Bar.H>
#include <Fl/fl_draw.H>

#include <iostream>
#include <vector>
#include "ChesPieces.h"
#include <fl/fl_ask.h>
#include <string>
#include <algorithm>
#include <iterator>

class SimpleWin: public Fl_Double_Window
{
    public:
        SimpleWin(int w, int h, const char* l = 0);
        SimpleWin(int x,  int y, int w, int h, const char* l = 0);
        int handle(int e);
        void draw_chess();
        void draw_line();
        void draw();
        int current_x();
        int current_y();
        // 检查捺方向 丶
        int calc(int v);
        bool down_check(int x, int y);
        std::string gerer_key(int x, int y);
        // 当前棋的颜色
        std::string color_name();
        // 检查横向
        bool check_one(int x, int y);
        bool check_two(int x, int y);
        // 改变棋盘大小，重新画线
        void change_size(SimpleWin* win);
        bool check_three(int x, int y);
        bool check_four(int x, int y);
        // 重新开局
        void reset();
        // 下一次落子的颜色
        void change_color();
        int current_color();
        virtual ~SimpleWin();

    protected:

    private:
        Fl_Box *box{};
        Fl_Menu_Bar *menu{};
        // 棋子半径
        int cr_ = 15;
        // 棋盘线间隔
        int line_cr_ = 30;
        // 是否已经分出胜负
        int win_ = 0;
        std::vector<std::pair<int, int>> colls{};
        // 当前棋子
        ChesPieces current_cp_;
        // 当前的x和y坐标,经过计算修正后的
        int current_calc_x_;
        int current_calc_y_;
        // 当前颜色
        int current_color_;
        // 所有棋子
        std::vector<ChesPieces>  ches_pieces_;
        // 坐标和棋子映射
        std::map<std::string, ChesPieces> xy_mapper_{};
        // 横方向五个坐标
        std::pair<int, int> one_;
        // 竖方向五个坐标
        std::pair<int, int> two_;
        // 撇方向五个坐标
        std::pair<int, int> three_;
        // 捺方向五个坐标
        std::pair<int, int> four_;
        int right_count_{};
        int left_count_{};
        // 下一个棋子颜色
        int next_color_ = 88;
        // 棋子线的条数
        int line_size_ = 9;
        // 线的起点坐标
        int line_start_x_ = 30;
        int line_start_y_ = 60;
        // 最大x边线 张条数-1 * 线间距 + 起始坐标(初始，改变线条后要重新计算)
        int line_end_x_ = ((line_size_ - 1) * line_cr_) + line_start_x_;
        // 最大y边线
        int line_end_y_ = ((line_size_ - 1) * line_cr_) + line_start_y_;
};

#endif // SIMPLEWIN_H
